package com.glela.platform.mapper;

import java.util.Collection;
import java.util.List;

import org.apache.ibatis.annotations.Param;

import com.glela.common.BaseSqlMapper;
import com.glela.platform.model.UserPromotion;
import com.glela.platform.vo.GoodsSimpleVo;
import com.glela.platform.vo.UserPromotionVo;

/**
 * 
 * @author 卫耀华
 *
 */
public interface UserPromotionMapper extends BaseSqlMapper<UserPromotion> {

	/**
	 * 根据优惠劵详情id和用户id查询 ，用户持有优惠劵详细
	 * 
	 * @param promotionDetailId 优惠劵详细id
	 * @param userId 用户id
	 * @return
	 */
	public UserPromotion selectUserPromotionByPromotionDetailIdAndUserId(@Param("promotionDetailId") int promotionDetailId, @Param("userId") long userId);

	/**
	 * <dl>
	 * <dt>查询用户可用优惠券</dt>
	 * </dl>
	 * @param userId 用户ID
	 * @param brandIds 品牌ID集合
	 * @param goodsIds 商品ID集合
	 * @return List<UserPromotionVo>
	 * @author zls
	 * @date 2017年8月19日 上午9:27:42
	 */
	List<UserPromotionVo> selectUserPromotion(@Param("userId") long userId, @Param("brandIds") Collection<Object> brandIds, @Param("goodsIds") Collection<Object> goodsIds);

	/**
	 * 添加用户优惠劵
	 * 
	 * @param userPromotion
	 * @return
	 */
	public void insertUserPromotion(UserPromotion userPromotion);

	/**
	 * 修改持有优惠劵 数量
	 * 
	 * @param id
	 * @return
	 */
	public void updateUserPromotionNumber(@Param("id") int id);

	public int updateUserPromotionNumberNum(@Param("promotionDetailId") int promotionDetailId, @Param("userId") long userId);

	/**
	 * 根据用户ID查询优惠券列表
	 * 
	 * @param userId
	 * @param pagelimit
	 * @param pageSize
	 * @return
	 */
	public List<UserPromotion> getUserPromotionListByUserId(@Param("userId") long userId, @Param("pagelimit") int pagelimit, @Param("pageSize") int pageSize);

	/**
	 * 统计我的优惠券总数字
	 * 
	 * @param userId
	 * @return
	 */
	public int countUserPromotionByUserId(@Param("userId") long userId);

	public List<UserPromotion> selectUserPromotionByUserIdEx(@Param("userId") long userId, @Param("goodId") long goodId, @Param("brandId") int brandId, @Param("totalPrice") long totalPrice);

	public List<UserPromotionVo> selectUserPromotionByUserIdEx2(@Param("userId") long userId, @Param("goods") List<GoodsSimpleVo> goods);

	public int subUserPromotionNumber(@Param("promotionDetailId") int promotionDetailId, @Param("userId") long userId);

	public int updateReturnMoney(@Param("userId") Long userId, @Param("cashCoin") long cashCoin);

	public List<UserPromotion> getUserPromotionListWhichNotUsed(@Param("userId") Long userId, @Param("pageLimit") int pageLimit, @Param("pageSize") int pageSize);

	public List<UserPromotion> getUserPromotionListWhichHasUsed(@Param("userId") Long userId, @Param("pageLimit") int pageLimit, @Param("pageSize") int pageSize);

	public List<UserPromotion> getUserPromotionListWhichOverdue(@Param("userId") Long userId, @Param("pageLimit") int pageLimit, @Param("pageSize") int pageSize);

	public int getUserPromotionTotalAmountWhichNotUsed(@Param("userId") Long userId);

	public List<UserPromotion> selectUserPromotionByPromotionIdAndUserId(@Param("promotionId") int promotionId, @Param("userId") Long userId);

	/**
	 * <dl>
	 * <dt>更新优惠券为已使用</dt>
	 * </dl>
	 * @param id 优惠券id
	 * @return int
	 * @author zls
	 * @date 2017年11月16日 下午3:28:52
	 */
	int updateStatusToUse(int id);

	/**
	 * <dl>
	 * <dt>更新优惠券为未使用</dt>
	 * </dl>
	 * @param id 优惠券id
	 * @return int
	 * @author zls
	 * @date 2017年11月16日 下午3:29:28
	 */
	int updateStatusToReturn(int id);

	/**
	 * <dl>
	 * <dt>更新优惠券为未使用</dt>
	 * </dl>
	 * @param id 优惠券id
	 * @param userId 优惠券所属用户
	 * @return int
	 * @author zls
	 * @date 2017年11月16日 下午3:36:39
	 */
	int updateStatusToReturnByUserId(@Param("id") int id, @Param("userId") long userId);

}
